package com.wiener.web.managebeans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;

import com.wiener.core.beans.Prospecto;
import com.wiener.core.beans.ProspectoDetalle;
import com.wiener.core.domain.Entidad;
import com.wiener.core.services.IntegrationServices;

@ManagedBean
@ApplicationScoped
public class ProspectoControlador implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 7863176297955561770L;

	public Prospecto prospecto;
	public List<ProspectoDetalle> prospectoDetalles;
	public ProspectoDetalle prospectoDetalle;
	public List<Entidad> tipoCaptacion;
	public List<Entidad> categoria;
	public String captacionValor;
	public String categoriaValor;

	public List<Entidad> paises;
	public List<Entidad> tipoDocumentos;
	public List<Entidad> genero;

	public List<Entidad> modoAcercamiento;
	public List<Entidad> descripcionAcercamiento;
	public List<Entidad> detalleAcercamiento;
	public List<Entidad> medioAtencion;

	public List<Entidad> tipoInstitucion;
	public List<Entidad> tipoGrado;
	public List<Entidad> tipoEmpresa;

	private List<Entidad> listaInstitucion1;
	private List<Entidad> listaInstitucion2;
	private List<Entidad> carrera1;
	private List<Entidad> periodo1;
	private List<Entidad> modalidad1;

	private List<Entidad> departamentos;
	private List<Entidad> provincias;
	private List<Entidad> distritos;
	
	private List<Entidad> meses;

	@ManagedProperty(value = "#{integrationServices}")
	private IntegrationServices integrationServices;

	public ProspectoControlador() {
		prospecto = new Prospecto();
		prospectoDetalles = new ArrayList<ProspectoDetalle>();
	}

	@PostConstruct
	private void inicializar() {
		prospecto = new Prospecto();
		try {
			tipoCaptacion = this.integrationServices.buscarTipoCaptacion();
			categoria = this.integrationServices.buscarCategoria();
			paises = this.integrationServices.buscarPaises();
			tipoDocumentos = this.integrationServices.buscarTipoDocumentos();
			genero = this.integrationServices.buscarGenero();
			modoAcercamiento = this.integrationServices.buscarModoAcercamiento();
			medioAtencion = this.integrationServices.buscarMedioAtencion();
			tipoInstitucion = this.integrationServices.buscarTipoInstitucion();
			tipoGrado = this.integrationServices.buscarTipoGrado();
			tipoEmpresa = this.integrationServices.buscarTipoEmpresa();
			listaInstitucion1 = new ArrayList<Entidad>();
			listaInstitucion2 = new ArrayList<Entidad>();
			carrera1 = new ArrayList<Entidad>();
			periodo1 = new ArrayList<Entidad>();
			modalidad1 = new ArrayList<Entidad>();
			departamentos = new ArrayList<Entidad>();
			provincias = new ArrayList<Entidad>();
			distritos = new ArrayList<Entidad>();
			prospectoDetalle = new ProspectoDetalle();
			listaInstitucion2 = integrationServices.buscarInstitucion1();
			meses = new ArrayList<Entidad>();

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void cargarCarrera1() {
		try {
			carrera1 = integrationServices.buscarCarrera1(prospectoDetalle
					.getInstitucion());
			periodo1 = integrationServices.buscarPeriodo1(prospectoDetalle
					.getInstitucion());
			modalidad1 = integrationServices.buscarModalidad1(prospectoDetalle
					.getInstitucion());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void cargarMeses1() {
		try {
			meses = integrationServices.buscarPeriodoDetalle(prospectoDetalle.getPeriodo(),prospectoDetalle
					.getInstitucion());
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void cargarFechaInicio(){
		prospectoDetalle.setMesInicio(prospectoDetalle.getMes().substring(0, prospectoDetalle.getMes().length()-6));
		prospectoDetalle.setMesAux(prospectoDetalle.getMes().substring(prospectoDetalle.getMes().length() -6, prospectoDetalle.getMes().length()));
	}

	
	public void guardarActualizar() {
		System.out.println(prospecto.toString());
		if (prospecto.getClienteInformes() != null) {
			this.integrationServices.guardarProspecto(prospecto, "U");
		} else {
			this.integrationServices.guardarProspecto(prospecto, "I");
		}
		buscar();
	}

	private static String obtenerNombreUsuario(SecurityContext securityContex)
			throws Exception {

		if (securityContex == null) {
			throw new Exception(" Your Session has been expired ");
		}
		Authentication authentication = securityContex.getAuthentication();

		if (authentication == null) {
			throw new Exception(" Autenticacion failure ");
		}
		String name = authentication.getName();

		return name;
	}

	public void guardarDetalle() throws Exception {
		prospectoDetalle.setCliente(prospecto.getClienteInformes());
		prospectoDetalle.setMes(prospectoDetalle.getMesAux());
		System.out.println(prospectoDetalle.toString());
		this.integrationServices.guardarProspectoDetalle(prospectoDetalle, "I",
				captacionValor, categoriaValor,
				obtenerNombreUsuario(SecurityContextHolder.getContext()), ""
						+ prospectoDetalle.getIndex());
		buscar();

	}

	public void actualizarDetalle() throws Exception {
		prospectoDetalle.setCliente(prospecto.getClienteInformes());
		prospectoDetalle.setMes(prospectoDetalle.getMesAux());
		this.integrationServices.guardarProspectoDetalle(prospectoDetalle, "U",
				captacionValor, categoriaValor,
				obtenerNombreUsuario(SecurityContextHolder.getContext()), ""
						+ prospectoDetalle.getIndex());
		buscar();
	}

	public void buscarDepartamentos() {
		try {
			departamentos = this.integrationServices
					.buscarDepartamento(prospecto.getPaisResidencia());
			provincias = new ArrayList<Entidad>();
			distritos = new ArrayList<Entidad>();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void buscarPronvicias() {
		try {
			provincias = this.integrationServices.buscarProvincia(
					prospecto.getPaisResidencia(), prospecto.getDepartamento());
			distritos = new ArrayList<Entidad>();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void buscarDistritos() {
		try {
			distritos = this.integrationServices.buscarDistrito(
					prospecto.getPaisResidencia(), prospecto.getDepartamento(),
					prospecto.getProvincia());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void buscarMedioPublicitario() {
		try {
			descripcionAcercamiento = this.integrationServices
					.buscarDescripcionAcercamiento(prospecto.getComoSeEntero());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void nuevoProspecto() {
		prospecto = new Prospecto();

		descripcionAcercamiento = new ArrayList<Entidad>();
		detalleAcercamiento = new ArrayList<Entidad>();
		prospectoDetalles = new ArrayList<ProspectoDetalle>();

	}

	public void guardarProspecto() {
		prospecto = new Prospecto();
	}

	public void buscarDetalleAcercamiento() {
		try {
			detalleAcercamiento = this.integrationServices
					.buscarDetalleAcercamiento(prospecto.getMedioPublicitario());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void buscar() {
		System.out.println(" buscando por dni ");
		try {
			prospecto = integrationServices.buscarCebeceraProspecto(prospecto
					.getNumeroDocumento());
			descripcionAcercamiento = this.integrationServices
					.buscarDescripcionAcercamiento(prospecto.getComoSeEntero());
			detalleAcercamiento = this.integrationServices
					.buscarDetalleAcercamiento(prospecto.getMedioPublicitario());

			prospectoDetalles = this.integrationServices
					.buscarProspectoDetalle(prospecto.getClienteInformes());

			listaInstitucion1 = integrationServices.obtenerInstitucion1();
			listaInstitucion2 = integrationServices.buscarInstitucion1();
			buscarDepartamentos();
			buscarPronvicias();
			buscarDistritos();
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println(" buscando por dni ");
	}

	public Prospecto getProspecto() {
		return prospecto;
	}

	public void setProspecto(Prospecto prospecto) {
		this.prospecto = prospecto;
	}

	public IntegrationServices getIntegrationServices() {
		return integrationServices;
	}

	public void setIntegrationServices(IntegrationServices integrationServices) {
		this.integrationServices = integrationServices;
	}

	public List<Entidad> getTipoCaptacion() {
		return tipoCaptacion;
	}

	public void setTipoCaptacion(List<Entidad> tipoCaptacion) {
		this.tipoCaptacion = tipoCaptacion;
	}

	public List<Entidad> getCategoria() {
		return categoria;
	}

	public void setCategoria(List<Entidad> categoria) {
		this.categoria = categoria;
	}

	public List<Entidad> getPaises() {
		return paises;
	}

	public void setPaises(List<Entidad> paises) {
		this.paises = paises;
	}

	public List<Entidad> getTipoDocumentos() {
		return tipoDocumentos;
	}

	public void setTipoDocumentos(List<Entidad> tipoDocumentos) {
		this.tipoDocumentos = tipoDocumentos;
	}

	public List<Entidad> getGenero() {
		return genero;
	}

	public void setGenero(List<Entidad> genero) {
		this.genero = genero;
	}

	public List<Entidad> getModoAcercamiento() {
		return modoAcercamiento;
	}

	public void setModoAcercamiento(List<Entidad> modoAcercamiento) {
		this.modoAcercamiento = modoAcercamiento;
	}

	public List<Entidad> getDescripcionAcercamiento() {
		return descripcionAcercamiento;
	}

	public void setDescripcionAcercamiento(List<Entidad> descripcionAcercamiento) {
		this.descripcionAcercamiento = descripcionAcercamiento;
	}

	public List<Entidad> getDetalleAcercamiento() {
		return detalleAcercamiento;
	}

	public void setDetalleAcercamiento(List<Entidad> detalleAcercamiento) {
		this.detalleAcercamiento = detalleAcercamiento;
	}

	public List<Entidad> getMedioAtencion() {
		return medioAtencion;
	}

	public void setMedioAtencion(List<Entidad> medioAtencion) {
		this.medioAtencion = medioAtencion;
	}

	public List<Entidad> getTipoInstitucion() {
		return tipoInstitucion;
	}

	public void setTipoInstitucion(List<Entidad> tipoInstitucion) {
		this.tipoInstitucion = tipoInstitucion;
	}

	public List<Entidad> getTipoGrado() {
		return tipoGrado;
	}

	public void setTipoGrado(List<Entidad> tipoGrado) {
		this.tipoGrado = tipoGrado;
	}

	public List<Entidad> getTipoEmpresa() {
		return tipoEmpresa;
	}

	public void setTipoEmpresa(List<Entidad> tipoEmpresa) {
		this.tipoEmpresa = tipoEmpresa;
	}

	public List<ProspectoDetalle> getProspectoDetalles() {
		return prospectoDetalles;
	}

	public void setProspectoDetalles(List<ProspectoDetalle> prospectoDetalles) {
		this.prospectoDetalles = prospectoDetalles;
	}

	public List<Entidad> getListaInstitucion1() {
		return listaInstitucion1;
	}

	public void setListaInstitucion1(List<Entidad> listaInstitucion1) {
		this.listaInstitucion1 = listaInstitucion1;
	}

	public List<Entidad> getDepartamentos() {
		return departamentos;
	}

	public void setDepartamentos(List<Entidad> departamentos) {
		this.departamentos = departamentos;
	}

	public List<Entidad> getProvincias() {
		return provincias;
	}

	public void setProvincias(List<Entidad> provincias) {
		this.provincias = provincias;
	}

	public List<Entidad> getDistritos() {
		return distritos;
	}

	public void setDistritos(List<Entidad> distritos) {
		this.distritos = distritos;
	}

	public ProspectoDetalle getProspectoDetalle() {
		return prospectoDetalle;
	}

	public void setProspectoDetalle(ProspectoDetalle prospectoDetalle) {
		this.prospectoDetalle = prospectoDetalle;
	}

	public String getCaptacionValor() {
		return captacionValor;
	}

	public void setCaptacionValor(String captacionValor) {
		this.captacionValor = captacionValor;
	}

	public String getCategoriaValor() {
		return categoriaValor;
	}

	public void setCategoriaValor(String categoriaValor) {
		this.categoriaValor = categoriaValor;
	}

	public List<Entidad> getListaInstitucion2() {
		return listaInstitucion2;
	}

	public void setListaInstitucion2(List<Entidad> listaInstitucion2) {
		this.listaInstitucion2 = listaInstitucion2;
	}

	public List<Entidad> getCarrera1() {
		return carrera1;
	}

	public void setCarrera1(List<Entidad> carrera1) {
		this.carrera1 = carrera1;
	}

	public List<Entidad> getPeriodo1() {
		return periodo1;
	}

	public void setPeriodo1(List<Entidad> periodo1) {
		this.periodo1 = periodo1;
	}

	public List<Entidad> getModalidad1() {
		return modalidad1;
	}

	public void setModalidad1(List<Entidad> modalidad1) {
		this.modalidad1 = modalidad1;
	}

	public List<Entidad> getMeses() {
		return meses;
	}

	public void setMeses(List<Entidad> meses) {
		this.meses = meses;
	}

	
}
